//预处理和宏（#开头的）是在编译时就运行
/*
C++中常用的宏
当前源代码文件名:__FILE__
当前源代码函数名: __FUNCTION__
当前源代码行号: __LINE__
编译的日期: __DATE__
编译的时间: __TIME__
编译的时间戳:__TIMESTAMP__
int型变量最大值(2^31 -1):INT_MAX
int型变量最小值(-2^31):INT_MIN
当用 C++编译程序时，宏_cplusplus 才会被定义
*/


cout << __FILE__ << endl;
cout << __FUNCTION__ << endl;
cout << __LINE__ << endl;
cout << __DATE__ << endl;
cout << __TIME__ << endl;
cout << __TIMESTAMP__ << endl;
cout << INT_MAX << endl;
cout << INT_MIN << endl;
cout << cplusplus << endl;

/*
运行结果:
main
227
Jul 10 2024
23:40:52
Wed Jul 10 23:40:52 2024
2147483647
-2147483648
199711
*/





//条件编译指令
//如果#ifdef后面的宏名已经存在，则使用程序段一，否则使用程序段二
#ifdef  标识符
    程序段一
#else
    程序段二
#endif


//如果#ifndef后面的宏名不存在，则使用程序段一，否则使用程序段二
#ifndef  标识符
    程序段一
#else
    程序段二
#endif

#include<iostream>
using namespace std;
int main()
{
    //不同的操作系统会自定义不同的宏: __linux__ 、_WIN32
#ifdef _WIN32
    cout << "这儿是windows系统。\n" << endl;  
    //这个系统中long是32位，long long为64位
#else
    cout << "这不是windows系统。\n" << endl;  
    //linux系统中long是64位
#endif

    return 0;
}
//运行结果: 这儿是windows系统。
//条件编译指令不是编译语句，在未被选中条件编译指令之间加一些乱七八糟的东西程序不会报错
//未被选中条件编译指令当作不存在

//C++main文件中头文件不允许重复包含
//解决方法一：在头文件包含#pragma once  （很方便，推荐用这个）
//解决方法二：用#ifndef指令，示例如下
//头文件：
    #ifndef _MOXI_(随便一个未被定义的宏名)
    #define _MOXI_
    //头文件代码内容
    #endif
//iostream头文件就是两个一起用的